package 左哥算法.ch13哈希分流与分段区间;

import org.junit.Test;

import javax.print.DocFlavor;
import java.util.*;

public class Ch02一些哈希的题目 {
    /**
     * ch01:力扣532,差值为k的去重数字对
     * 给你一个数组,找出数组中 差值为k的数字对(不能重复)
     */
    @Test
    public void ch01(){
        int [] nums={1, 2, 3, 4, 5};
        int k=1;
        System.out.println(findPairs(nums,k));
    }
    public int findPairs(int[] nums, int k) {
        int ans=0;
        //k为0的情况分别讨论
        if (k==0){
            Map<Integer, Integer> map=new HashMap<>();  //统计出现过的次数,如果出现次数大于1则符合要求
            for (int num : nums) {
                Integer count = map.getOrDefault(num, 0);
                map.put(num,count+1);
            }
            for (Integer num : map.keySet()) {
                if (map.get(num)>1){
                    ans++;
                }
            }
        }else{
            Set<Integer> set=new HashSet<>();
            for (int num : nums) {
                set.add(num);
            }
            for (Integer num : set) {
                if (set.contains(num+k)){
                    ans++;
                }
            }
        }
        return ans;
    }
}
